package br.com.estevam.sisfin.pages.cadastros;

import java.util.List;

import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.PageActivationContext;
import org.apache.tapestry5.corelib.components.BeanEditForm;
import org.apache.tapestry5.ioc.annotations.Inject;

import br.com.estevam.sisfin.annotations.InjectSelectionModel;
import br.com.estevam.sisfin.base.DefaultPage;
import br.com.estevam.sisfin.daos.interfaces.EstadoCivilDAO;
import br.com.estevam.sisfin.daos.interfaces.EstadoDAO;
import br.com.estevam.sisfin.daos.interfaces.PessoalDAO;
import br.com.estevam.sisfin.daos.interfaces.SexoDAO;
import br.com.estevam.sisfin.entities.Estado;
import br.com.estevam.sisfin.entities.EstadoCivil;
import br.com.estevam.sisfin.entities.Pessoal;
import br.com.estevam.sisfin.entities.Sexo;
import br.com.estevam.sisfin.enums.OrderEnums;
import br.com.estevam.sisfin.tools.ValidarCpfOrCnpj;

public class CadastroPessoalAddEdit extends DefaultPage {

	@PageActivationContext
	private Pessoal pessoal;

	@Component
	private BeanEditForm beanEditForm;

	@Inject
	private PessoalDAO pessoalDAO;

	@Inject
	private SexoDAO sexoDAO;
	
	@Inject
	private EstadoDAO estadoDAO;
	
	@Inject
	private EstadoCivilDAO estadoCivilDAO;

	@InjectSelectionModel(labelField = "descricao", idField = "id")
	private List<Sexo> listSexo;
	
	@InjectSelectionModel(labelField = "descricao", idField = "id")
	private List<Estado> listEstado;
	
	@InjectSelectionModel(labelField = "descricao", idField = "id")
	private List<EstadoCivil> listEstadoCivil;

	@SuppressWarnings("unchecked")
	void onPrepare(){
		this.listSexo = (List<Sexo>) this.sexoDAO.findAllOrderBy("descricao", OrderEnums.ASC_ORDER);
		this.listEstado = (List<Estado>) this.estadoDAO.findAll();
		this.listEstadoCivil = (List<EstadoCivil>) this.estadoCivilDAO.findAll();
	}

	void onValidateFromListSexo(Sexo sexo){
		if(sexo == null){
			beanEditForm.recordError("Obrigatorio escolher um sexo!");
		}
	}
	
	void onValidateFromListEstado(Estado estado){
		if(estado == null){
			beanEditForm.recordError("Obrigatorio escolher um estado!");
		}
	}

	void onValidateFromCpf(String cpf){
		final Pessoal p = pessoalDAO.findByCpf(cpf);
		if(p != null && this.pessoal.getId() == 0){
			beanEditForm.recordError("O Pessoal do descrição é " + p.getNome() + " e " +
					"cpf é " + p.getCpf() + " ja está cadastrando");
		} 

		if(! ValidarCpfOrCnpj.CPF(cpf)){
			beanEditForm.recordError("CPF Inválido!");
		}
	}
	
	void onValidateFromCpf2(String cpf){
		if(! ValidarCpfOrCnpj.CPF(cpf)){
			beanEditForm.recordError("CPF Inválido e Contrato para Administração do Banco de Dados.");
		}
	}

	Class<CadastroPessoal> onSuccess(){
		pessoalDAO.addOrUpdate(pessoal);
		return CadastroPessoal.class;
	}

	public boolean isEdit(){
		return (this.getPessoal().getId() == 0 ? true : false);
	}

	public Pessoal getPessoal() {
		return pessoal;
	}

	public void setPessoal(Pessoal pessoal) {
		this.pessoal = pessoal;
	}

	public List<Sexo> getListSexo() {
		return listSexo;
	}

	public void setListSexo(List<Sexo> listSexo) {
		this.listSexo = listSexo;
	}

	public List<Estado> getListEstado() {
		return listEstado;
	}

	public void setListEstado(List<Estado> listEstado) {
		this.listEstado = listEstado;
	}

	public List<EstadoCivil> getListEstadoCivil() {
		return listEstadoCivil;
	}

	public void setListEstadoCivil(List<EstadoCivil> listEstadoCivil) {
		this.listEstadoCivil = listEstadoCivil;
	}

}
